/*******************************************
 * Copyright 2007 Aphrodite Framework for javaME .
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the GNU Public License v2.0
 * which accompanies this distribution, and is available at
 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
 * Email : owner@aphroditeme.dev.java.net
 * Contributors:
 *     Kent Elton - initial API and implementation
 *******************************************/

package com.aphrodite.xml.wap;

import java.io.IOException;

//   FIXME: would adding a file name make sense ?? 

/** a possibly chained exception, indicatin a line and column number. */

public class ParseException extends IOException {

	protected int lineNumber = -1;
	protected int columnNumber = -1;
	protected Exception chained;

	/**
	 * Builds a new ParseException with the given message text, chained
	 * Exception, lineNumber, columNumber. Set message text or chained exception
	 * to null and lineNumber and columNumber to -1 if not applicable.
	 */

	public ParseException(String msg, Exception chained, int lineNumber, int columnNumber) {

		super((msg == null ? "ParseException" : msg) + " @" + lineNumber + ":" + columnNumber);

		this.chained = chained;
		this.lineNumber = lineNumber;
		this.columnNumber = columnNumber;
	}

	/*
	 * Removed since super is not available in MIDP :(
	 * 
	 * prints the own stack trace followed by the stack trace of the original
	 * exception to the given PrintStream
	 * 
	 * public void printStackTrace (PrintStream p) { super.printStackTrace (p);
	 * if (chained != null) chained.printStackTrace (p); }
	 * 
	 * 
	 * / prints the own stack trace followed by the stack trace of the original
	 * exception to the given PrintWriter
	 * 
	 * public void printStackTrace (PrintWriter p) { super.printStackTrace (p);
	 * if (chained != null) chained.printStackTrace (p); }
	 */

	/**
	 * prints the own stack trace followed by the stack trace of the original
	 * exception.
	 */

	public void printStackTrace() {
		super.printStackTrace();
		if (chained != null)
			chained.printStackTrace();
	}

	public int getLineNumber() {
		return lineNumber;
	}

}
